package com.example.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.domain.User;
import com.example.dto.AdminAddDTO;
import com.example.dto.UserLoginDTO;
import com.example.dto.UserRegisterDTO;
import com.example.dto.UserUpdateDTO;
import com.example.util.Result;

import java.util.List;

/**
* @author HP
* @description 针对表【user】的数据库操作Service
* @createDate 2025-08-18 19:33:25
*/
public interface UserService extends IService<User> {

    /**
     * 用户注册
     * @param userRegisterDTO 用户注册信息
     * @return 是否注册成功
     */
    Result register(UserRegisterDTO userRegisterDTO);

    /**
     * 用户登录
     * @param userLoginDTO 用户登录信息
     * @return 用户信息
     */
    Result login(UserLoginDTO userLoginDTO);

    /**
     * 更新用户信息
     * @param userUpdateDTO 用户更新信息
     * @return 是否更新成功
     */
    Result updateUserInfo(UserUpdateDTO userUpdateDTO);

    /**
     * 修改密码
     * @param userId 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 是否修改成功
     */
    Result changePassword(Long userId, String oldPassword, String newPassword);

    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return 用户信息
     */
    User getUserByUsername(String username);

    /**
     * 根据ID查询用户
     * @param id 用户ID
     * @return 用户信息
     */
    Result getUserById(Long id);

    /**
     * 禁用借书权限
     * @param userId 用户ID
     * @return 是否禁用成功
     * @return
     */
    Result disableBorrow(Long userId);
    /**
     * 启用借书权限
     * @param userId 用户ID
     * @return 是否启用成功
     */
    Result enableBorrow(Long userId);

    /**
     * 禁用预约权限
     * @param userId 用户ID
     * @return 是否禁用成功
     */
    Result disableReservation(Long userId);

    /**
     * 启用预约权限
     * @param userId 用户ID
     * @return 是否启用成功
     */
    Result enableReservation(Long userId);

    /**
     * 禁用入馆权限
     * @param userId 用户ID
     * @return 是否禁用成功
     */
    Result disableEntry(Long userId);
    /**
     * 启用入馆权限
     * @param userId 用户ID
     * @return 是否启用成功
     */
    Result enableEntry(Long userId);

    Result logout();

    Result addAdmin(AdminAddDTO adminAddDTO);

    Result deleteAdmin(Long id);

    Result getUsers();

    Result getAdmins();

    Result resetPassword(Long userId);

    Result changeAdminStatus(Long userId, Integer status);

    Result changeUserStatus(Long userId, Integer status);

    Result getUserById();
}
